/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Servlets;

import Entidades.Aviso;
import Entidades.Barrio;
import Entidades.Empleador;
import Entidades.ExperienciaLaboral;
import Entidades.FormacionAcademica;
import Entidades.Idioma;
import Entidades.IdiomaConocido;
import Entidades.Institucion;
import Entidades.Localidad;
import Entidades.Postulante;
import Entidades.Provincia;
import Entidades.Telefono;
import Entidades.TipoDoc;
import Entidades.TipoInstitucion;
import Entidades.TipoTitulo;
import Entidades.Usuario;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Administrador
 */
@WebServlet(name = "crearPostulante", urlPatterns = {"/crearPostulante"})
public class crearPostulante extends HttpServlet {

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try {
            String nombreTipoDoc;
            TipoDoc tipoDoc;
            int nroDoc;
            String nombrePersona;
            String apellido;
            String estadoCivil;
            String calle;
            String nroCalle;
            String sexo = "";
            Barrio barrio;
            String nombreBarrio;
            Localidad localidad;
            Provincia provincia;
            String fechaNac;
            String email;
            Usuario usuario;
            Telefono telefono;
            String diaObtencion;
            String mesObtencion;
            String anioObtencion;
            String fechaObtencion;
            String diaInicio;
            String mesInicio;
            String anioInicio;
            String fechaInicio;
            String diaFin;
            String mesFin;
            String anioFin;
            String fechaFin;
            Postulante post = new Postulante();
            int idPostulante = post.getUltimaId();
            ArrayList<ExperienciaLaboral> experienciaLaboral = new ArrayList<ExperienciaLaboral>();
            ArrayList<IdiomaConocido> idiomasConocidos = new ArrayList<IdiomaConocido>();
            ArrayList<FormacionAcademica> formacionAcademica = new ArrayList<FormacionAcademica>();
            int nroFormAc = Integer.parseInt(request.getParameter("nroFormAc"));
            int nroExpLab = Integer.parseInt(request.getParameter("nroExpLab"));
            for (int i = 0; i <= nroFormAc; i++) {
                diaObtencion = request.getParameter("selectDiaObtencion" + i);
                mesObtencion = request.getParameter("selectMesObtencion" + i);
                anioObtencion = request.getParameter("selectAnioObtencion" + i);
                if (Integer.parseInt(diaObtencion) < 10) {
                    diaObtencion = "0" + diaObtencion;
                }
                fechaObtencion = anioObtencion + "/" + mesObtencion + "/" + diaObtencion;
                formacionAcademica.add(new FormacionAcademica(new Institucion(request.getParameter("txtNomInstitucion" + i), new TipoInstitucion(request.getParameter("selectTipoInstitucion" + i)), new Localidad(request.getParameter("selectNomLocalidad" + i), new Provincia(request.getParameter("selectNomProvincia" + i)))), request.getParameter("txtTitulo" + i), new TipoTitulo(request.getParameter("selectTipoTitulo" + i)), fechaObtencion));
            }

            if (request.getParameter("checkExpLab") != null) {
                for (int i = 0; i <= nroExpLab; i++) {
                    diaInicio = request.getParameter("selectDiaInicio" + i);
                    mesInicio = request.getParameter("selectMesInicio" + i);
                    anioInicio = request.getParameter("selectAnioInicio" + i);
                    if (Integer.parseInt(diaInicio) < 10) {
                        diaInicio = "0" + diaInicio;
                    }
                    fechaInicio = anioInicio + "/" + mesInicio + "/" + diaInicio;
                    diaFin = request.getParameter("selectDiaFin" + i);
                    mesFin = request.getParameter("selectMesFin" + i);
                    anioFin = request.getParameter("selectAnioFin" + i);
                    if (Integer.parseInt(diaFin) < 10) {
                        diaFin = "0" + diaFin;
                    }
                    fechaFin = anioFin + "/" + mesFin + "/" + diaFin;
                    Empleador emp = new Empleador(request.getParameter("txtEmpresa" + i));
                    emp.setTelefono(new Telefono("Fijo", Long.parseLong(request.getParameter("txtTelefonoEmpresa" + i))));
                    experienciaLaboral.add(new ExperienciaLaboral(emp, fechaInicio, fechaFin, request.getParameter("txtSupervisor" + i)));
                }
            }

            String ingles = request.getParameter("chkIngles");
            String portugues = request.getParameter("chkPortugues");
            String otro = request.getParameter("chkOtro");
            String nivelIng = request.getParameter("selectNivelIdiomaIng");
            String nivelPort = request.getParameter("selectNivelIdiomaPort");
            Conexion.AccesoADatos acceso = new Conexion.AccesoADatos();
            if (ingles != null) {
                idiomasConocidos.add(new IdiomaConocido(new Idioma(ingles), nivelIng));
            }
            if (portugues != null) {
                idiomasConocidos.add(new IdiomaConocido(new Idioma(portugues), nivelPort));
            }

            for (int i = 0; i < Integer.parseInt(request.getParameter("nroHabilidades")); i++) {
                acceso.insertar("insert into conocimientosxpostulante (nombreConocimiento, nivel, idPostulante) values ('" + request.getParameter("selectConocimiento" + i) + "','" + request.getParameter("selectNivelConocimiento" + i) + "', '" + idPostulante + "' )");
            }

            HttpSession sesion = request.getSession(false);
            String nombreUsuario = "";

            try {
                nombreUsuario = (String) sesion.getAttribute("USER");
            } catch (Exception e) {
            }

            ResultSet per = acceso.leer("select * from Persona where usuario='" + nombreUsuario + "'");

            try {
                per.next();
                int codigoAviso = Integer.parseInt(request.getParameter("codigo"));
                nombreTipoDoc = per.getString("nombreTipoDoc");
                tipoDoc = new TipoDoc(nombreTipoDoc);
                nroDoc = per.getInt("nroDoc");
                nombrePersona = per.getString("nombrePersona");
                apellido = per.getString("apellido");
                estadoCivil = per.getString("estadoCivil");
                calle = per.getString("calle");
                nroCalle = per.getString("nroCalle");
                sexo = per.getString("sexo");
                localidad = new Localidad(per.getString("nombreLocalidad"), new Provincia(per.getString("nombreProvincia")));
                nombreBarrio = per.getString("nombreBarrio");
                email = per.getString("email");
                fechaNac = per.getString("fechaNac");

                Postulante p = new Postulante(apellido, nombrePersona, nroDoc, tipoDoc, estadoCivil, nroCalle, calle, sexo, fechaNac, email, true);
                p.setExperienciaLaboral(experienciaLaboral);
                p.setIdPostulante(idPostulante);
                p.setFormacionAcademica(formacionAcademica);
                p.setIdiomasConocidos(idiomasConocidos);

                String idNuevo = "" + idPostulante;
                if (p.insertarPostulante(idNuevo, codigoAviso)) {
                    request.getRequestDispatcher("postulacionOK.jsp").forward(request, response);
                } else {
                    request.getRequestDispatcher("index.jsp").forward(request, response);
                }

            } catch (Exception e) {
            }


        } finally {
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
